package jp.ac.u_tokyo.dch.action;

import javax.servlet.http.HttpSession;

import jp.ac.u_tokyo.dch.core.db.DBConnection;
import jp.ac.u_tokyo.dch.dao.user.UsersDao;
import jp.ac.u_tokyo.dch.model.db.User;
import jp.ac.u_tokyo.dch.service.DaoServiceAware;
import jp.ac.u_tokyo.dch.view.Constants;

import org.apache.commons.lang.xwork.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
/**
* @version 1.1
*/
public class LoginAction extends ActionSupport implements DaoServiceAware {

	/**
	 *シリアル番号
	 */
	private static final long serialVersionUID = 887075152486395483L;

	/**
	 * DBコネクションオブジェクト
	 */
	private DBConnection dbConnection = null;
	/**
	 * ユーザID
	 */
	private String userId;
	/**
	 * パースワード
	 */
	private String password;

	private String directUrl;
	/**
	 * ロガー
	 */
	public Logger logger = Logger.getLogger(getClass());

	/**
	 * ログイン処理を行う
	 * @return 結果
	 * @throws Exception 例外
	 */
	public String execute() throws Exception {

		if (StringUtils.isEmpty(userId)) {
			addFieldError("userId", "ユーザーIDを入力してください。");
			return INPUT;
		}

		if (StringUtils.isEmpty(password)) {
			addFieldError("password", "パスワードを入力してください。");
			return INPUT;
		}
		UsersDao usersDao = new UsersDao(dbConnection);
		User user = usersDao.selectByIdPassWord(userId, password);
		if ( user == null) {
			addActionError("ユーザーＩＤまたは パスワード が違います。");
			return INPUT;
		}
		String url = (String) ServletActionContext.getRequest().getSession(true).getAttribute(Constants.DIRECT_URL);
		ServletActionContext.getRequest().getSession(true).invalidate();
		HttpSession newsession = ServletActionContext.getRequest().getSession(
				true);
		//ログイン成功した場合、セッションにログイン情報を設定する
		newsession.setAttribute("loginUserId", user.getId());
		newsession.setAttribute("loginUserName",user.getName());


		if (StringUtils.isEmpty(url)) {
			directUrl = "main";
		} else {
			directUrl = url;
		}

		return SUCCESS;
	}

	/**
	 * ログアウト
	 * @return 結果
	 * @throws Exception
	 */
	public String logout() throws Exception{
		HttpSession newsession = ServletActionContext.getRequest().getSession();
		if(newsession != null){
			newsession.removeAttribute("loginUserId");
			newsession.removeAttribute("loginUserName");
		}

		return SUCCESS;
	}



	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getDirectUrl() {
		return directUrl;
	}

	public void setDirectUrl(String directUrl) {
		this.directUrl = directUrl;
	}

	@Override
	public void setDBConnection(DBConnection con) {
		dbConnection = con;

	}

}
